package com.liu.sunnyday.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.liu.sunnyday.dao.OrderSettingDao;
import com.liu.sunnyday.exception.SunnydayException;
import com.liu.sunnyday.pojo.OrderSetting;
import com.liu.sunnyday.service.OrderSettingService;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * chance！Time
 *
 * @author liuqian
 * @date 2022-06-21 11:54
 * *
 */
@Service(interfaceClass = OrderSettingService.class)
public class OrderSettingServiceimpl implements OrderSettingService {

    @Autowired
    private OrderSettingDao orderSettingDao;


    @Override
    public void add(List<OrderSetting> orderSettingList) {
        //1.遍历，挨个取出每一行(OrderSetting)
        for (OrderSetting os : orderSettingList) {
            //2.取出日期
            Date orderDate = os.getOrderDate();
            /**
             * 3.拿日期查询数据表里边是否存在重复，如果重复代表医生现在要进行更新
             * 逻辑：
             * 存在
             * 判断数据库表中已预约人数是否大于 要更新的 可预约人数
             *  大于 则报错
             *  小于 则更新可预约数
             * 不存在
             *  则插入预约设置
             */
            OrderSetting osInDb = orderSettingDao.findByOrderDate(orderDate);
            //判断对应的日期是否存在(excel中一行对应一个OrderSetting实体)
            if (null != osInDb) {//存在该日期
                //判断数据库表中已预约人数是否大于 要更新的 可预约人数,反之抛异常
                if (osInDb.getReservations() > os.getNumber()) {
                    //大于 则报错
                    throw new SunnydayException(os.getOrderDate() + "中，已预约的人数比你现在设置的可预约人数要大");
                }
                //小于 则更新可预约数
                orderSettingDao.updateNumber(os);
            } else {//不存在
                orderSettingDao.add(os);
            }
        }
    }

    @Override
    public List<Map<String, Integer>> getOSDate(String month) {
        //拼接开始日期
        String startDate = month + "-01";
        return orderSettingDao.getOSDate(startDate);
    }
}